#ifndef BATAILLE_H
#   define BATAILLE_H

#include "def_etat_bataille.h"
#include "statistiques.h"


/**
 * \file etat_bataille.h
 * Ce module permet de manipuler des structures etat_bataille.
 * ces structures contiennent les informations liees aux ennemis vivants,
 * aux projectiles en cours de vol, et contient egalement les coordonnees
 * du joueur dans la zone (pour savoir dans quelle zone il est, il faudra
 * chercher dans une structure etat_partie, mais cela ne sera pas utile durant
 * les batailles).
 *
 * Utilisation :
 *
 * 1) Initialiser l'etat_bataille avec init_etat_bataille. N'oubliez pas
 * que charger_carte_zone s'en charge elle-meme !
 *
 * 2) Utiliser les accesseurs pour obtenir des informations durant la bataille.
 *
 * 3) Detruire l'etat_bataille avec detruire_etat_bataille. Pour plus de
 * clarte, il est preferable de faire ca dans un moment proche de celui de la
 * destruction de la carte_zone, car elles sont utiles/inutiles aux memes
 * moments.
 *
 * Note : Tout comme les structures carte_zone, les etat_bataille ne sont pas
 * destines a etre places dans le tas. Si vous souhaitez le faire, il faudra
 * la liberer vous-meme, car la fonction de destruction ne libere que les
 * champs de l'etat_bataille, et non la structure elle-meme.
 */





/**
 * \fn void init_etat_bataille(struct etat_bataille* bataille, struct etat_partie* partie, const struct base_donnees* donnees)
 * \brief Initialise une structure etat_bataille afin qu'elle puisse etre
correctement remplie et utilisee
 *
 * \param[out] bataille Un pointeur vers l'etat_bataille a initialiser
 * \param[in,out] partie L'adresse de l'etat de la partie
 * \param[in] donnees L'adresse d'une base_donnees correctement remplie
 */
void init_etat_bataille(struct etat_bataille* bataille, struct etat_partie* partie, const struct base_donnees* donnees);



/**
 * \fn void detruire_etat_bataille(struct etat_bataille* bataille)
 * \brief Libere la memoire allouee pour le contenu
d'une structure etat_bataille
 *
 * \param[in] bataille L'adresse de l'etat_bataille concerne
 */
void detruire_etat_bataille(struct etat_bataille* bataille);



/* ============ accesseurs pour les statistiques temporaires =============== */



/**
 * \fn unsigned int get_pv_actuels_joueur(const struct etat_bataille* bataille)
 * \brief Permet de savoir combien il reste de points de vie au joueur lors d'une bataille
 *
 * \param[in] bataille L'adresse de l'etat de la bataille en cours
 * \return Le nombre de points de vie qu'il reste au joueur
 */
unsigned int get_pv_actuels_joueur(const struct etat_bataille* bataille);



/**
 * \fn unsigned int get_puissance_temp(const struct etat_bataille* bataille);
 * \brief Obtient la puissance du joueur
 *
 * \param[in] bataille L'adresse de l'etat de la bataille
 * \return La puissance temporaire du joueur (entier positif)
 */
unsigned int get_puissance_temp(const struct etat_bataille* bataille);



/**
 * \fn unsigned int get_vitesse_deplacement_temp(const struct etat_bataille* bataille);
 * \brief Obtient la vitesse de deplacement du joueur
 *
 * \param[in] bataille L'adresse de l'etat de la bataille
 * \return La vitesse de deplacement temporaire du joueur (entier positif)
 */
unsigned int get_vitesse_deplacement_temp(const struct etat_bataille* bataille);



/**
 * \fn unsigned int get_vitesse_charge_temp(const struct etat_bataille* bataille);
 * \brief Obtient la vitesse de charge du joueur
 *
 * \param[in] bataille L'adresse de l'etat de la bataille
 * \return La vitesse de charge temporaire du joueur (entier positif)
 */
unsigned int get_vitesse_charge_temp(const struct etat_bataille* bataille);



/**
 * \fn unsigned int get_pv_max_temp(const struct etat_bataille* bataille);
 * \brief Obtient les points de vie maximums du joueur
 *
 * \param[in] bataille L'adresse de l'etat de la bataille
 * \return Le maximum temporaire de points de vie du joueur (entier positif)
 */
unsigned int get_pv_max_temp(const struct etat_bataille* bataille);



#endif /* BATAILLE_H */
